/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cip.esymons.eventos.bc;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.cip.esymons.eventos.be.EntregaMaterial;
import org.cip.esymons.eventos.be.Matricula;

/**
 *
 * @author Lizardo Rios
 */
@Stateless
public class EntregaMaterialFacade implements EntregaMaterialFacadeLocal {
    @PersistenceContext
    private EntityManager em;

    public void create(EntregaMaterial entrega) {
        em.persist(entrega);
    }

    public void edit(EntregaMaterial entrega) {
        em.merge(entrega);
    }

    public void remove(EntregaMaterial entrega) {
        em.remove(em.merge(entrega));
    }

    public EntregaMaterial find(Object id) {
        return em.find(EntregaMaterial.class, id);
    }

    public List<EntregaMaterial> findAll() {
        return em.createQuery("select e from EntregaMaterial e ").getResultList();
    }

    public List<EntregaMaterial> listarEntregasXMaterial(Integer codigoMaterial) {
        return em.createQuery("select e from EntregaMaterial e where e.macCodigo.macCodigo = ?1")
                .setParameter(1, codigoMaterial)
                .getResultList();
    }

    public List<EntregaMaterial> listarEntregaMaterial(Integer codCurso, Integer codMaterial) {
        return em.createQuery("select e from EntregaMaterial e where e.matCodigo.matCodigo in (select m.matCodigo from Matricula m join m.preinscripcionEvento p where p.pinEsPreinscripcion = true and m.matEstado = 1 and p.evento.eveCodigo = ?1) and e.macCodigo.macCodigo = ?2")
                .setParameter(1, codCurso)
                .setParameter(2, codMaterial)
                .getResultList();
    }

    public List<Matricula> listarMatriculadosAEntregar(Integer codCurso, Integer codMaterial) {
        return em.createQuery("select m from Matricula m join m.preinscripcionEvento p where m.matCodigo not in (select e.matCodigo.matCodigo from EntregaMaterial e where e.matCodigo.matCodigo in (select m1.matCodigo from Matricula m1 join m1.preinscripcionEvento p1 where p1.pinTipo = true and p1.pinEsPreinscripcion = true and m1.matEstado = 1 and p.evento.eveCodigo = ?1) and e.macCodigo.macCodigo = ?2)and p.pinEsPreinscripcion = true and m.matEstado = 1 and p.evento.eveCodigo = ?1")
                .setParameter(1, codCurso)
                .setParameter(2, codMaterial)
                .getResultList();
    }

}

